#include "order.h"
#include "customer.h"
#include <QString>
#include <QFile>
#include <QDateTime>
#include <QTextStream>

int order::orderID = 0; // 初始化为 0

order::order(customer *customerPtr):c(customerPtr) {
    orderID += 1; // 每次创建 reservation 对象时，orderID 自增 1
    QString path = QString::number(orderID); // 将 orderID 转换为字符串，作为文件路径的一部分
    QFile file("订单/订单" + path + ".txt");
    if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        QTextStream out(&file);
        out << "订单号: " << orderID << "\n";
        // 在这里可以继续添加订单信息
        file.close(); // 关闭文件
    } else {
        // 文件打开失败处理逻辑
    }
}

double order::operator+(order *o){
    double price=this->allprice+o->allprice;
    return price;
}

void order::operator=(order *o){
   this->orders= o->orders;
    this->allprice=o->allprice;
    this->c=o->c;
}

order::order(customer *customerPtr,order &o):c(customerPtr){
    orderID += 1; // 每次创建 reservation 对象时，orderID 自增 1
    QString path = QString::number(orderID); // 将 orderID 转换为字符串，作为文件路径的一部分
    QFile file("订单/订单" + path + ".txt");
    if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        QTextStream out(&file);
        out << "订单号: " << orderID << "\n";
        // 在这里可以继续添加订单信息
        file.close(); // 关闭文件
    } else {
        // 文件打开失败处理逻辑
    }
    this->orders=o.orders;
}

QStringList order::checkOrder(){
    QString path = QString::number(orderID); // 将 orderID 转换为字符串，作为文件路径的一部分
    QFile file("订单/订单" + path + ".txt");
    QStringList myQueue;
    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        QTextStream in(&file);
        QString line;
        while (!in.atEnd()) {
            line = in.readLine();
            myQueue.append(line);
        }
        file.close();
        return myQueue;
    } else {
        // 文件打开失败时的处理
        QStringList emptyList;
        throw emptyList;  // 返回空的 QStringList
    }
}

void order::orderfood(QString name,int num) {
    QString path = QString::number(orderID); // 将 orderID 转换为字符串，作为文件路径的一部分
    QFile file("订单/订单" + path + ".txt");

    if (file.open(QIODevice::Append | QIODevice::Text)) {
        QTextStream out(&file);
        QString str_price = c->getPrice(name);  // 假设 getPrice 函数为获取菜品价格的方法
        out << name << ' ' << str_price << " *" << num << "\n\n";  // 写入菜品名、价格和数量
        ordertuple order = {name, str_price.toDouble(), num};
        this->orders.append(order);
        file.close();  // 关闭文件
    } else {
        throw "订单操作失败！";
    }
}
void order::orderfood1(QString name,int num) {
    QString path = QString::number(orderID); // 将 orderID 转换为字符串，作为文件路径的一部分
    QFile file("订单/订单" + path + ".txt");

    if (file.open(QIODevice::Append | QIODevice::Text)) {
        QTextStream out(&file);
        QString str_price = c->getPrice(name);  // 假设 getPrice 函数为获取菜品价格的方法
        out << name << ' ' << str_price << " *" << num << "\n\n";  // 写入菜品名、价格和数量
        ordertuple order = {name, str_price.toDouble(), num};
        file.close();  // 关闭文件
    } else {
        throw "订单操作失败！";
    }
}

void order::submitorder(QString name) {
    int priceAll = 0;  // 初始化总金额为 0
    // 遍历 orders 列表并获取第二个和第三个元素相乘
    for (const ordertuple &tuple : orders) {
        int quantity = tuple.quantity;
        qreal price = tuple.price;
        double price0 = quantity * price;
        priceAll += price0;
    }
    allprice=priceAll*c->discount;

    QString path = QString::number(orderID); // 将 orderID 转换为字符串，作为文件路径的一部分
    QFile file("订单/订单" + path + ".txt");
    if (file.open(QIODevice::Append | QIODevice::Text)) {
        QTextStream out(&file);
        QString currentTime = QDateTime::currentDateTime().toString();  // 获取当前日期时间
        out << "以上订单的总金额为：" << priceAll << "\n";  // 将总金额写入订单文件
        out << "以上订单的打完折扣"<< c->discount <<"后的总金额为：" << allprice << "\n";  // 将总金额写入订单文件
        out << "\n当前日期为：" << currentTime << "\n\n";  // 将当前日期时间写入订单文件
        out << "您("<< c->name <<")的订单将由配送员 " + name + " 运送\n\n";  // 写入配送员信息
        file.close();  // 关闭订单文件
    } else {
        // 文件打开失败逻辑
        throw "文件打开失败";
    }
}

order::~order(){
    delete c;
}
